1   /*
2    * Author: 		Alexis Cartier <alexcrt>
3    * Date :  		27 déc. 2014
4   */
5   
6   package com.codepoetics.protonpack;
7   
8   import static org.junit.Assert.assertEquals;
9   import static org.junit.Assert.assertTrue;
10  
11  import java.util.Arrays;
12  import java.util.List;
13  import java.util.Map;
14  
15  import com.codepoetics.protonpack.maps.MapStream;
16  import org.junit.Before;
17  import org.junit.Test;
18  
19  public class MapStreamTest {
20      
21      private MapStream<String, Integer> mapStream;
22      
23      @Before
24      public void setUp() {
25          mapStream = MapStream.of("John", 1, "Alice", 2);
26      }
27      
28      @Test
29      public void testMapKeys() {
30          Map<String, Integer> map = mapStream.mapKeys(x -> x.substring(2)).collect();
31          assertTrue(map.containsKey("hn"));
32          assertEquals(Integer.valueOf(1), map.get("hn"));
33      }
34      
35      @Test
36      public void testMapValues() {
37          Map<String, Integer> map = mapStream.mapValues(x -> x + 5).collect();
38          assertEquals(Integer.valueOf(6), map.get("John"));
39      }
40      
41      @Test
42      public void testMapEntries() {
43          Map<String, Integer> map = mapStream.mapEntries(x -> x.concat(" Doe"), i -> i%2).collect();
44          assertEquals(Integer.valueOf(1), map.get("John Doe"));
45          assertEquals(Integer.valueOf(0), map.get("Alice Doe"));
46      }
47      
48      @Test(expected = IllegalStateException.class)
49      public void testFailMergeKeys() {
50         mapStream.mapKeys(x -> Character.isUpperCase(x.charAt(0))).collect();
51      } 
52      
53      @Test
54      public void testMergeKeys() {
55          Map<Boolean, List<Integer>> map = mapStream.mapKeys(x -> Character.isUpperCase(x.charAt(0))).mergeKeys().collect();
56          assertEquals(Arrays.asList(1, 2), map.get(true));
57          assertEquals(null, map.get(false));
58      }
59      
60      @Test
61      public void testMergeKeysWithBinaryFunction() {
62          Map<Boolean, Integer> map = mapStream.mapKeys(x -> Character.isUpperCase(x.charAt(0))).mergeKeys(Integer::sum).collect();
63          assertEquals(Integer.valueOf(3), map.get(true));
64          assertEquals(null, map.get(false));
65      }
66      
67      @Test
68      public void testReverseMapping() {
69          Map<Integer, String> map = mapStream.inverseMapping().collect();
70          assertEquals("John", map.get(1));
71          assertEquals("Alice", map.get(2));
72          
73          map.put(3, "John");
74          
75          Map<String, Integer> mapReversed = MapStream.of(map).inverseMapping().collect(Integer::sum);
76          assertEquals(Integer.valueOf(4), mapReversed.get("John"));
77          assertEquals(Integer.valueOf(2), mapReversed.get("Alice"));
78      }
79  }